#!/bin/bash
# 设置 containerd 的运行时任务目录
RUNTIME_DIR="/run/containerd/io.containerd.runtime.v2.task/k8s.io"

# 检查目录是否存在
if [ ! -d "$RUNTIME_DIR" ]; then
  echo "错误: 目录 $RUNTIME_DIR 不存在！"
  exit 1
fi

# 检查 crictl 是否安装
if ! command -v crictl &> /dev/null; then
  echo "错误: crictl 未安装，请先安装 crictl！"
  exit 1
fi

# 遍历运行时目录中的每个容器
echo "正在分析容器大小（仅显示大于 1G 的容器）..."
echo "=============================================="
for CONTAINER_DIR in "$RUNTIME_DIR"/*; do
  if [ -d "$CONTAINER_DIR" ]; then
    # 获取容器 ID
    CONTAINER_ID=$(basename "$CONTAINER_DIR")
    
    # 计算目录大小（以 KB 为单位）
    SIZE_KB=$(du -sk "$CONTAINER_DIR" | awk '{print $1}')
    
    # 将大小转换为 GB
    SIZE_GB=$(echo "scale=2; $SIZE_KB / 1024 / 1024" | bc)
    
    # 判断是否大于 1G
    if (( $(echo "$SIZE_GB > 1" | bc -l) )); then
      # 使用 crictl 获取容器信息
      CONTAINER_INFO=$(crictl inspect "$CONTAINER_ID" 2>/dev/null)
      if [ $? -eq 0 ]; then
        # 提取 pod 名称和容器名称，只取第一个匹配并清理格式
        POD_NAME=$(echo "$CONTAINER_INFO" | awk '/"io.kubernetes.pod.name"/ {gsub(/.*"io.kubernetes.pod.name":"|",.*/,""); print; exit}')
        CONTAINER_NAME=$(echo "$CONTAINER_INFO" | awk '/"io.kubernetes.container.name"/ {gsub(/.*"io.kubernetes.container.name":"|",.*/,""); print; exit}')
        
        echo "容器 ID: $CONTAINER_ID"
        echo "大小: ${SIZE_GB}G"
        echo "Pod: $POD_NAME"
        echo "容器名称: $CONTAINER_NAME"
        echo "----------------------------------------------"
      else
        echo "容器 ID: $CONTAINER_ID"
        echo "大小: ${SIZE_GB}G"
        echo "警告: 无法获取容器信息（可能已停止或删除）"
        echo "----------------------------------------------"
      fi
    fi
  fi
done
echo "=============================================="
echo "分析完成！"
